package kotlincore.chapt02.高阶函数和Lambda.函数类型

import kotlincore.chapt02.高阶函数和Lambda.实例函数作为参数的需求.Country

class test {
}

fun main() {
    /*Kotlin函数类型的格式非常简单
    (Int) -> Unit
    1,通过->符号来组织参数类型和返回值，左边是参数类型，右边是返回值类型
    2，必须用一个括号来包裹参数类型
    3，返回值类型即使用Unit，也必须显式声明。
    *
    * */
    //函数类型的变量
    val funtype1:(Int) -> Unit

    //如果是一个没有参数的函数类型，参数类型部分就用()来表示
    val funtype2:() ->Unit
    //如果是多个参数的情况，那么我们就需要用逗号来进行分隔
    val funtype3:(Int,String) -> Unit

    //此外，Kotlin还支持为声明参数指定名字,如下所示
    val funtype4:(errCode:Int,errMsg:String) -> Unit

    //如果errMsg在某种情况下可空，那么就可以如此声明类型
    val funtype5 :(errCode:Int,errMsg:String?)-> Unit

    //如果该函数类型的变量也是可先的话，我们还可以把整个函数类型变成可选
    val funtype6:((errCode:Int,errMsg:String) -> Unit)?

    //高阶函数还支持返回另一个函数,表示传入一个类型为 Int的参数，然后返回另一个类型为(Int)-> Unit的函数
    val funtype7:(Int) -> ((Int) -> Unit)

    //简化它的表达式，我们可以把后半部分的括号省略:
    val funtype8: (Int) -> (Int)-> Unit

    //需要注意的是，以下的函数类型则不同，它表示的是传入一个函数类型的参数，再返回一个Unit
    val funtype9:((Int) ->Int) ->Unit
    val test:(Country)->Boolean
}